home *** CD-ROM | disk | FTP | other *** search
/ Software Vault: The Gold Collection / Software Vault - The Gold Collection (American Databankers) (1993).ISO / cdr49 / 109_01.zip / COUNT.C < prev    next >
Text File  |  1993-06-26  |  4KB  |  192 lines

  1. /*    -------------------------------------------------------
  2.     *** Template for Procedure Heading ***
  3.  
  4.     Name:
  5.     Result:
  6.     Errors:
  7.     Globals:
  8.     Macros:
  9.     Procedures:
  10.  
  11.     Action:
  12.  
  13.     ------------------------------------------------------- */
  14.  
  15. /*    : : : : : : : : : : : : : : : : : : : : : : : : : : : :
  16.  
  17.         Program to count the number of:
  18.         chars, words or lines in a file
  19.  
  20.     : : : : : : : : : : : : : : : : : : : : : : : : : : : : */
  21.  
  22.  
  23. /*    : : : : : : : : : : : : : : : : : : : : : : : : : : : :
  24.  
  25.         Macros for constant definitions
  26.  
  27.     : : : : : : : : : : : : : : : : : : : : : : : : : : : : */
  28.  
  29. #define EOFF -1        /* end of file marker returned by getc() */
  30. #define NOFILE -1    /* no such file indication given by fopen() */
  31.  
  32. #define YES 1        /* true */
  33. #define NO 0        /* false */
  34.  
  35. #define EOF 0x1A    /* CP/M's end file char for ascii files */
  36. #define CR 0x0D        /* Carriage return */
  37.  
  38. /*    -------------------------------------------------------
  39.  
  40.     Name:        main(argc,argv)
  41.     Result:        ---
  42.     Errors:        invocation syntax or no such file
  43.     Globals:    ---
  44.     Macros:        NOFILE
  45.     Procedures:    badcmd(),printf(),chrcount(),wrdcount()
  46.             lincount(),exit(),fopen(),tolower()
  47.  
  48.     Action:        Interpert the command line
  49.             handle invocation errors
  50.             open file for buffered input
  51.             handle no file error
  52.             call the counting routine specified
  53.             print results of counting routine on console
  54.  
  55.     ------------------------------------------------------- */
  56.  
  57.  
  58. main(argc,argv)
  59.     int argc;
  60.     char *argv[];
  61.     {
  62.     int fd;
  63.     char inbuf[134];
  64.  
  65.     if(argc != 3)
  66.       badcmd();
  67.     else if( (fd = fopen(argv[1],inbuf)) == NOFILE )
  68.       printf("No such file %s\n",argv[1]);
  69.     else if( tolower( *argv[2] ) == 'c' )
  70.       printf("There are %u characters in file %s\n",
  71.             chrcount(inbuf),argv[1]);
  72.     else if( tolower( *argv[2] ) == 'w' )
  73.       printf("There are %u words in file %s\n",wrdcount(inbuf),argv[1]);
  74.     else if( tolower( *argv[2] ) == 'l' )
  75.       printf("There are %u lines in file %s\n",lincount(inbuf),argv[1]);
  76.     else
  77.       badcmd();
  78.     exit();
  79.     }
  80.  
  81. /*    -------------------------------------------------------
  82.  
  83.     Name:        badcmd()
  84.     Result:        ---
  85.     Errors:        ---
  86.     Globals:    ---
  87.     Macros:        ---
  88.     Procedures:    puts()
  89.  
  90.     Action:        Print the invocation error message
  91.             on the console
  92.  
  93.     ------------------------------------------------------- */
  94.  
  95.  
  96. badcmd()
  97.     {
  98.     puts("Correct invocation form is: COUNT <filename> <item>\n");
  99.     puts("Where <item> is C[har] or W[ords] or L[ines]\n");
  100.     return;
  101.     }
  102.  
  103. /*    : : : : : : : : : : : : : : : : : : : : : : : : : : : :
  104.     function chrcount --count the characters in the specified input file
  105.     : : : : : : : : : : : : : : : : : : : : : : : : : : : : */
  106. /*    -------------------------------------------------------
  107.  
  108.     Name:        chrcount(file)
  109.     Result:        # of chars in file
  110.     Errors:        ---
  111.     Globals:    ---
  112.     Macros:        EOFF,EOF
  113.     Procedures:    getc()
  114.  
  115.     Action:        ---
  116.  
  117.     ------------------------------------------------------- */
  118.  
  119.  
  120. chrcount(file)
  121.     char file[];    /* the file buffer */
  122.     {
  123.     unsigned cc;    /* character count */
  124.     int c;        /* 1 char buffer */
  125.  
  126.     cc =0;
  127.     while( (c = getc(file)) != EOFF && c != EOF)
  128.       cc++;
  129.     return cc;
  130.     }        /* end chrcount */
  131.  
  132.  
  133. /*    -------------------------------------------------------
  134.  
  135.     Name:        wrdcount(file)
  136.     Result:        # of words (strings enclosed in space) in file
  137.     Errors:        ---
  138.     Globals:    ---
  139.     Macros:        EOFF,EOF,CR,YES,NO
  140.     Procedures:    getc(),isspace()
  141.  
  142.     Action:        ---
  143.  
  144.     ------------------------------------------------------- */
  145.  
  146. wrdcount(file)
  147.     char file[];    /* the file buffer */
  148.     {
  149.     int inword;    /* switch to tell if the present char is in a word */
  150.     unsigned wc;    /* word count */
  151.     int c;        /* 1 char buffer */
  152.  
  153.     wc =0;
  154.     inword = NO;
  155.     while( (c = getc(file)) != EOFF && c != EOF)
  156.       if(isspace(c) || c == CR)
  157.         inword = NO;
  158.       else if(inword == NO) {
  159.         inword = YES;
  160.         wc++;
  161.         }
  162.     return wc;
  163.     }        /* end wrdcount */
  164.  
  165.  
  166. /*    -------------------------------------------------------
  167.  
  168.     Name:        lincount(file)
  169.     Result:        # of lines ('\n's) in file
  170.     Errors:        ---
  171.     Globals:    ---
  172.     Macros:        EOFF,EOF
  173.     Procedures:    getc()
  174.  
  175.     Action:        ---
  176.  
  177.     ------------------------------------------------------- */
  178.  
  179.  
  180. lincount(file)
  181.     char file[];    /* the file buffer */
  182.     {
  183.     unsigned lc;    /* line count */
  184.     int c;        /* 1 char buffer */
  185.  
  186.     lc =0;
  187.     while( (c = getc(file)) != EOFF && c != EOF)
  188.       if(c == '\n')
  189.         lc++;
  190.     return lc;
  191.     }        /* end lincount */
  192.